// 测试级联数据格式转换
// 模拟原始分类数据
const mockCategoryData = [
    { id: 1, name: "电子产品", pid: 0 },
    { id: 2, name: "手机", pid: 1 },
    { id: 3, name: "苹果手机", pid: 2 },
    { id: 4, name: "iPhone 14", pid: 3 },
    { id: 5, name: "iPhone 15", pid: 3 },
    { id: 6, name: "安卓手机", pid: 2 },
    { id: 7, name: "华为", pid: 6 },
    { id: 8, name: "小米", pid: 6 },
    { id: 9, name: "电脑", pid: 1 },
    { id: 10, name: "笔记本", pid: 9 },
    { id: 11, name: "台式机", pid: 9 },
    { id: 12, name: "服装", pid: 0 },
    { id: 13, name: "男装", pid: 12 },
    { id: 14, name: "女装", pid: 12 },
    { id: 15, name: "T恤", pid: 13 },
    { id: 16, name: "裤子", pid: 13 },
    { id: 17, name: "裙子", pid: 14 },
    { id: 18, name: "鞋子", pid: 14 }
];

/**
 * 构建级联选择器所需的层级结构
 */
function buildCascaderOptions(list) {
    // 1. 筛选顶级分类（pid=0）
    const rootCategories = list.filter((category) => category.pid === 0);

    // 2. 递归构建子分类
    const buildChildren = (parentId, level = 1) => {
        // 获取当前层级的子分类
        const children = list
            .filter((category) => category.pid === parentId)
            .map((category) => {
                // 构建基础结构
                const option = {
                    value: category.id,
                    label: category.name,
                };

                // 递归查找子分类，不限制层级
                const childOptions = buildChildren(category.id, level + 1);
                // 只有当子分类存在时才添加children属性
                if (childOptions && childOptions.length > 0) {
                    option.children = childOptions;
                }

                return option;
            });
        return children;
    };

    // 3. 组装顶级分类及其子分类
    return rootCategories.map((category) => {
        const option = {
            value: category.id,
            label: category.name,
        };
        // 构建子分类
        const children = buildChildren(category.id, 1);
        // 只有当子分类存在时才添加children属性
        if (children && children.length > 0) {
            option.children = children;
        }
        return option;
    });
}

// 执行转换
const result = buildCascaderOptions(mockCategoryData);

// 输出结果
console.log("转换后的级联数据格式:");
console.log(JSON.stringify(result, null, 2));

// 验证格式是否符合要求
console.log("\n验证结果:");
console.log("1. 顶级分类数量:", result.length);
console.log("2. 第一个顶级分类:", result[0]?.label);
console.log("3. 第一个顶级分类的子分类数量:", result[0]?.children?.length || 0);
console.log("4. 数据结构示例:", {
    value: result[0]?.value,
    label: result[0]?.label,
    hasChildren: !!result[0]?.children
}); 